<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>[[${appName}]]</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, maximum-scale=1"
    />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <link rel="icon" type="image/png" th:href="${appFavicon}">
    <link
      rel="stylesheet"
      title="default"
      th:href="@{${contextPath}+'/amis/sdk/antd.css'}"
    />
    <link
      rel="stylesheet"
      th:href="@{${contextPath}+'/amis/sdk/helper.css'}"
    />
    <script th:src="@{${contextPath}+'/amis/sdk/sdk.js'}"></script>
    <!-- <script src="https://unpkg.com/vue@2"></script> -->
    <script th:src="@{${contextPath}+'/amis/lib/history/history.js'}"></script>
    <link
      rel="stylesheet"
      th:href="@{${contextPath}+'/amis/public/style.css'}"
    />
    <style>
      html,
      body,
      .app-wrapper {
        position: relative;
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <div id="root" class="app-wrapper"></div>
    <script>
      const __mamis__contextPath = '[[${contextPath}]]';
      const __mamis__sysCode = '[[${sysCode}]]';
      const __mamis__loginName = '[[${loginName}]]';
      (function () {
        let amis = amisRequire('amis/embed');
        const match = amisRequire('path-to-regexp').match;

        // 如果想用 browserHistory 请切换下这处代码, 其他不用变
        const history = History.createBrowserHistory();
        //const history = History.createHashHistory();

        const amisJSON = {
          type: 'app',
          brandName: '[[${appName}]]',
          logo: '[[${appLogo}]]',
          header: 
{
  "type": "container",
  "className": "w-full",
  "bodyClassName": "flex justify-between",
  "body": [{
    "type": "tpl",
    "className": "flex flex-col justify-center",
    "tpl": "[[${appHeader}]]"
  }, {
    "type": "dropdown-button",
    "label": "欢迎你, [[${username}]]",
    "level": "link",
    "size": "lg",
    "trigger": "hover",
    "closeOnClick": true,
    "buttons": [/*
      {
        "type": "button",
        "label": " 切换应用",
        "icon": "fa fa-cogs",
        "actionType": "url",
        "url": "${__mamis__contextPath}/mamis/access/logout",
        "blank": false
      },
      {
        "type": "button",
        "label": " 切换部门",
        "icon": "fa fa-random",
        "actionType": "url",
        "url": "${__mamis__contextPath}/mamis/access/logout",
        "blank": false
      },*/
      {
        "type": "button",
        "label": " 个人设置",
        "icon": "fa fa-id-card",
        "actionType": "link",
        "url": "/plat/user-profile",
        "blank": false
      },
      {
        "type": "divider",
        "lineStyle": "solid"
      },
      {
        "type": "button",
        "label": " 退出登录",
        "icon": "fa fa-power-off",
        "actionType": "url",
        "url": "${__mamis__contextPath}/mamis/access/logout",
        "blank": false
      }
    ]
  }]
},
          footer: '<div class="p-2 text-center bg-light">[[${appFooter}]]</div>',
          // asideBefore: '<div class="p-2 text-center">菜单前面区域</div>',
          // asideAfter: '<div class="p-2 text-center">菜单后面区域</div>',
          api: '/mamis/pages/site.json?_t=' + new Date().getTime()
        };

        function normalizeLink(to, location = history.location) {
          to = to || '';

          if (to && to[0] === '#') {
            to = location.pathname + location.search + to;
          } else if (to && to[0] === '?') {
            to = location.pathname + to;
          }

          const idx = to.indexOf('?');
          const idx2 = to.indexOf('#');
          let pathname = ~idx
            ? to.substring(0, idx)
            : ~idx2
            ? to.substring(0, idx2)
            : to;
          let search = ~idx ? to.substring(idx, ~idx2 ? idx2 : undefined) : '';
          let hash = ~idx2 ? to.substring(idx2) : location.hash;

          if (!pathname) {
            pathname = location.pathname;
          } else if (pathname[0] != '/' && !/^https?\:\/\//.test(pathname)) {
            let relativeBase = location.pathname;
            const paths = relativeBase.split('/');
            paths.pop();
            let m;
            while ((m = /^\.\.?\//.exec(pathname))) {
              if (m[0] === '../') {
                paths.pop();
              }
              pathname = pathname.substring(m[0].length);
            }
            pathname = paths.concat(pathname).join('/');
          }

          return pathname + search + hash;
        }

        function isCurrentUrl(to, ctx) {
          if (!to) {
            return false;
          }
          const pathname = history.location.pathname;
          const link = normalizeLink(to, {
            ...location,
            pathname,
            hash: ''
          });

          if (!~link.indexOf('http') && ~link.indexOf(':')) {
            let strict = ctx && ctx.strict;
            return match(link, {
              decode: decodeURIComponent,
              strict: typeof strict !== 'undefined' ? strict : true
            })(pathname);
          }

          return decodeURI(pathname) === link;
        }

        let amisInstance = amis.embed(
          '#root',
          {
            ...amisJSON,
            "data": { ...amisJSON.data, __mamis__contextPath, __mamis__sysCode, __mamis__loginName }
          },
          {
            location: history.location
          },
          {
            requestAdaptor(api) {
              if (api.url.startsWith('//') ||
                 !api.url.startsWith('/') ||
                  api.url === __mamis__contextPath) {
                return api;
              }
              
              return {...api, url: __mamis__contextPath + api.url, headers: {...api.headers, 'mamis-sys-code': __mamis__sysCode } };
            },
            // watchRouteChange: fn => {
            //   return history.listen(fn);
            // },
            updateLocation(location, replace) {
              location = normalizeLink(location);
              if (location === 'goBack') {
                return history.goBack();
              } else if (
                (!/^https?\:\/\//.test(location) &&
                  location ===
                    history.location.pathname + history.location.search) ||
                location === history.location.href
              ) {
                // 目标地址和当前地址一样，不处理，免得重复刷新
                return;
              } else if (/^https?\:\/\//.test(location) || !history) {
                return (window.location.href = location);
              }

              history[replace ? 'replace' : 'push'](location);
            },
            jumpTo(to, action) {
              if (to === 'goBack') {
                return history.goBack();
              }

              to = normalizeLink(to);

              if (isCurrentUrl(to)) {
                return;
              }

              if (action && action.actionType === 'url') {
                action.blank === false
                  ? (window.location.href = to)
                  : window.open(to, '_blank');
                return;
              } else if (action && action.blank) {
                window.open(to, '_blank');
                return;
              }

              if (/^https?:\/\//.test(to)) {
                window.location.href = to;
              } else if (
                (!/^https?\:\/\//.test(to) &&
                  to === history.pathname + history.location.search) ||
                to === history.location.href
              ) {
                // do nothing
              } else {
                history.push(to);
              }
            },
            isCurrentUrl: isCurrentUrl,
            theme: 'antd'
          }
        );

        history.listen(state => {
          amisInstance.updateProps({
            location: state.location || state
          });
        });
      })();
    </script>
  </body>
</html>
